import os

from langchain.agents import create_react_agent
from langchain.chains.api.base import APIChain
from langchain.chains.combine_documents.stuff import StuffDocumentsChain, create_stuff_documents_chain
from langchain.chains.llm import LLMChain
from langchain.chains.structured_output import create_structured_output_runnable
from langchain.chains.summarize import load_summarize_chain
from langchain_community.document_loaders import WebBaseLoader, TextLoader
from langchain_core.documents import Document
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate, format_document
from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAI
from langchain_core.pydantic_v1 import BaseModel, Field
from typing import Optional


os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "langchain_chain[1.0.0]"
os.environ["LANGCHAIN_API_KEY"] = "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"
os.environ["GOOGLE_API_KEY"] = "AIzaSyBJoz7BvdFgWTBwzcu-0xWpJKfEJOR6vPM"
os.environ['SERPAPI_API_KEY'] = '47afe0f70fefbe12e10919ee52248ac01d28652b763975bc84347a774805f3b6'

#chat = ChatGoogleGenerativeAI(model="gemini-pro", temperature=0)
#llm = GoogleGenerativeAI(model="models/gemini-1.5-pro-latest", temperature=0)
chat = ChatGoogleGenerativeAI(model="gemini-2.0-pro-exp-02-05", temperature=0)


#总结 摘要
def simple_demo():
    prompt_template = """写出以下内容的简洁总结,并梳理其股票相关概念：
    "{context}"
    总结： """
    prompt = PromptTemplate.from_template(prompt_template)
    #loader = WebBaseLoader("https://mp.weixin.qq.com/s/1O3QMq6iYu1bTbQGQRHv6g",encoding="utf8")
    #docs = loader.load()
#     str = """
#     国电南瑞科技股份有限公司成立于2001年2月28日，由南瑞集团作为主发起人，2003年9月首次向社会公众发行A股股票并于10月16日在上海证券交易所上市，股票简称“国电南瑞”，证券代码“600406”。
#
# 国电南瑞是以能源电力智能化为核心的能源互联网整体解决方案提供商，是我国能源电力及工业 控制领域卓越的 IT 企业和电力智能化领军企业。公司以先进的控制技术和信息技术为基础，以“大数据、云计算、物联网、移动互联、人工智能、区块链”等技术为核心，为电网、发电、轨道交通、水利水务、市政公用、工矿等行业和客户提供软硬件产品、整体解决方案及应用服务。历经多年自主创新和产业发展，公司已发展成为总资产规模 660 亿元，年营业收入 385 亿元、市值规模超千亿元的板块龙头上市公司，拥有电网自动化及工业控制、继电保护及柔性输电、电力自动化信息通信、发电及水利环保四大业务板块，下设 1 个研究院、4 个事业部，15 家分公司、26 家子公司。
#
# 国电南瑞具有信息系统集成及服务一级、建筑智能化系统设计专项甲级和电子与智能化工程专业承包一级、安防工程企业设计施工维护能力一级、软件能力成熟度模型集成五级（CMMI5）、工程设计电力行业（送电工程、变电工程）专业甲级等资质。
#
# 国电南瑞大力弘扬“党建引领、创新驱动、质量为本、客户至上、合作共赢”的发展理念和“努力超越、追求卓越”的企业精神，坚持“以技术立足、以客户至上、以员工为本”的经营理念和“始于客户需求，立于持续改进，终于客户满意”的服务理念，坚持科技创新，不断寻求突破，把握行业发展趋势动态，积极拓展业务领域，丰富和完善产品线。近年来在电网自动化及工业控制、继电保护及柔性输电、电力自动化信息通信、发电及水利环保等领域，锲而不舍地开展应用型研发和技术创新，形成多项具有核心技术和自主知识产权的、富有竞争力的产品，取得了诸多开创性科研成果，赢得了良好口碑与客户赞同，在业界树立了优秀企业形象。经过多年发展，国电南瑞获得多项殊荣：国资委“科改示范企业”，国家火炬计划重点高新技术企业，国家规划布局内重点软件企业，江苏省企业技术创新奖获奖单位，江苏省文明单位，企业信用评价AAA级信用企业。软件产品入选“中国十大创新软件产品”。国电南瑞入选上证180、沪深300、央视50等多个指数，在三届中国“央视财经50指数·十佳回报公司”评比中均位列第一，入选中国上市公司资本品牌百强和资本品牌溢价百强榜、主板上市公司价值百强榜、市值管理绩效百佳榜、金牛上市公司百强榜，蝉联大众证券报“最佳持续投资价值奖”，在上市公司经营管理方面获得资本市场高度赞誉。国电南瑞高度重视ESG工作，完善 ESG治理体系，持续提升管理水平，国电南瑞入选国资委“央企ESG·先锋50指数”，入选央视“中国ESG上市公司先锋100”榜单，入选央视“中国ESG上市公司科技创新先锋30”企业榜单。
#
# 国电南瑞建立了战略决策、业务信息、财务内控、科研开发、质量控制、人力资源等多方面的管理体系。科学的组织机构，完善、高效、合理的运行体系，更加适应市场竞争的需要，保持持续的竞争优势和能力，不断获得快速发展的新空间。国电南瑞积极采用多种资本运作手段，不断提升上市公司市值管理，通过首发上市、再融资等手段募集企业发展资金，建设大型产业化和研发基地，通过兼并收购等方式，收购优势资产，不断提升核心竞争力，不断完善产业链，持续做大做强做优做新。
#
# 国电南瑞主动适应国家经济发展新常态，准确把握新一轮工业革命、能源革命和电力体制改革契机，以传统优势产业提升、新型支柱产业培育、现代服务业发展、国际化发展为重点，顺应“互联网 +”、人工智能、5G、区块链等发展趋势，坚持创新驱动，突出能源电力技术引领、高端装备研发和整体解决方案打造，大力实施创新发展、协调发展、融合发展、集聚发展和统筹发展，以全面建设成为国际领先的能源互联网产业集团为战略目标，致力于发展成为服务能源互联网建设的技术引领者和服务经济社会发展的价值创造者。
#     """
#     doc = Document(page_content=str)

    # docs = [doc]
    # loader = TextLoader("F:/tmp/output_遥远的救世主.txt", encoding="utf8")
    # docs = loader.load()

    # MapReduceDocumentsChain
    # RefineDocumentsChain -- langchain.chains.combine_documents.refine.RefineDocumentsChain
    stuff_chain = create_stuff_documents_chain(llm=chat, prompt=prompt)
    #llm_chain = LLMChain(llm=llm, prompt=prompt)
    #stuff_chain = StuffDocumentsChain(llm_chain=chat ,document_variable_name="text")
    doc = Document(title='',page_content='【固态电池概念震荡拉升 南都电源20CM涨停】财联社2月21日电，南都电源20CM涨停，此前华丰股份涨停，冠盛股份、杉杉股份、新宙邦、瑞泰新材、鹏辉能源等涨超5%。消息面上，比亚迪锂电池有限公司CTO孙华军在第二届中国全固态电池创新发展高峰论坛上透露，比亚迪将在2027年左右启动全固态电池批量示范装车应用，2030年后实现大规模上车。')
    print(doc)

    result = stuff_chain.invoke({"context": [doc]})
    print(result)

def structured_simple_demo():
    class RecordDog(BaseModel):
        '''Record some identifying information about a dog.'''

        name: str = Field(..., description="The dog's name")
        color: str = Field(..., description="The dog's color")
        fav_food: Optional[str] = Field(None, description="The dog's favorite food")


    prompt = ChatPromptTemplate.from_messages(
        [
            ("system", "You are an extraction algorithm. Please extract every possible instance"),
            ('human', '{input}')
        ]
    )
    structured_llm = create_structured_output_runnable(
        RecordDog,
        llm,
        mode="openai-tools",
        enforce_function_usage=True,
        return_single=True
    )
    result = structured_llm.invoke({"input": "Harry was a chubby brown beagle who loved chicken"})
    create_react_agent
    print(result)

def refine_summarize_demo():
    loader = TextLoader("F:/tmp/output_遥远的救世主.txt", encoding="utf8")
    docs = loader.load()





def api_chain_demo():
    pass



if __name__ == "__main__":
    simple_demo()